import 'package:flutter/material.dart';

class TextHighlighter {

  TextHighlighter._();

  /// 高亮文本中的关键词
  static List<TextSpan> highlight({
    required String text,
    required String query,
    Color highlightColor = Colors.red,
    TextStyle? normalStyle,
    TextStyle? highlightStyle,
  }) {
    if (query.isEmpty) {
      return [TextSpan(text: text, style: normalStyle)];
    }

    final List<TextSpan> spans = [];
    final String lowerText = text.toLowerCase();
    final String lowerQuery = query.toLowerCase();
    int start = 0;
    int index;

    // 循环查找所有匹配的关键词
    while ((index = lowerText.indexOf(lowerQuery, start)) != -1) {
      // 添加非高亮部分
      if (index > start) {
        spans.add(
          TextSpan(
            text: text.substring(start, index),
            style: normalStyle,
          ),
        );
      }

      // 添加高亮部分
      spans.add(
        TextSpan(
          text: text.substring(index, index + query.length),
          style: highlightStyle ?? TextStyle(
            color: highlightColor,
            fontWeight: FontWeight.bold,
          ),
        ),
      );

      start = index + query.length;
    }

    // 添加剩余部分
    if (start < text.length) {
      spans.add(
        TextSpan(
          text: text.substring(start),
          style: normalStyle,
        ),
      );
    }

    return spans;
  }
}